package com.liusy.event;

/**
 * 事件接口
 * 
 * @author liusy 2012-04-5
 */
public interface IEvent {
	
	/**
	 * 事件类型
	 * @return
	 */
	public String getType();
	
	/**
	 * 设置事件包含数据参数
	 * @return
	 */
	public void setData(Object data);
	
	/**
	 * 返回事件数据
	 * @return data 返回事件包含数据
	 */
	public Object getData();

	/**
	 * 指示对象是否已经定义了指定的属性。 Object
	 * @param name
	 * @return
	 */
	public Boolean hasOwnProperty(String name) throws SecurityException;

	/**
	 * 检查是否已对事件调用 preventDefault()。 Event
	 * 
	 * @return
	 */
	public Boolean isDefaultPrevented();

	/**
	 * 指示 Object 类的实例是否在指定为参数的对象的原型链中。 Object
	 * 
	 * @param theClass
	 * @return
	 */
	public Boolean isPrototypeOf(Object theClass);

	/**
	 * 如果可以取消事件的默认行为，则取消该行为。 Event
	 */
	public void preventDefault();

	/**
	 * 指示指定的属性是否存在、是否可枚举。 Object
	 * 
	 * @param name
	 * @return
	 */
	public Boolean propertyIsEnumerable(String name);

	/**
	 * 设置循环操作动态属性的可用性。 Object
	 * 
	 * @param name
	 * @param isEnum
	 */
	public void setPropertyIsEnumerable(String name, Boolean isEnum);

	/**
	 * 防止对事件流中当前节点中和所有后续节点中的事件侦听器进行处理。 Event
	 */
	public void stopImmediatePropagation();

	/**
	 * 防止对事件流中当前节点的后续节点中的所有事件侦听器进行处理。 Event
	 */
	public void stopPropagation();

	/**
	 * 在自定义 Event 类中实现 toString() 方法的实用程序函数。 Event
	 * 
	 * @param className
	 * @param args
	 * @return
	 */
	public String formatToString(String className, Object... args) ;

	/**
	 * 返回一个字符串，其中包含 Event 对象的所有属性。
	 * 
	 * @return
	 */
	public String toString();

	/**
	 * 复制 Event 子类的实例。 Event
	 * 
	 * @return {@link IEvent}
	 */
	public IEvent clone();

}
